header{ 
	package genGrammar;
}

class Anasint extends Parser;

options {
	importVocab = Analex;
	k = 3;
}

entrada: (definiciones)* (tareas)? (tareas2)?;
definiciones:IDENT (CORCHETES1 datos CORCHETES2);
datos: (IDENT | NUMERO) (OPERADOR_MENOS (IDENT | NUMERO))+;
tareas: PORCENT LLAVE1 (INT IDENT SEMICOLON)* PORCENT LLAVE2;

tareas2: PORCENT PORCENT (regla)* PORCENT PORCENT;
regla: (argumento)+ incremento;
argumento: (argumento2 (OPERADOR_MAS | PARENTESIS1 (argumento2 (OR argumento2))* PARENTESIS2 ASTERISCO));
argumento2: (LLAVE1 IDENT LLAVE2);
incremento: IDENT OPERADOR_MAS OPERADOR_MAS SEMICOLON;
funcion: (INT|CHAR|VOID) IDENT PARENTESIS argumentos2 PARENTESIS LLAVE (result|codigo) LLAVE;
result: (RETURN(NUMERO|IDENT)) SEPARADOR;
variables: argumentos2 (COMA argumentos2)*;
argumentos2:(INT|CHAR|VOID)(ASTERISCO IDENT CORCHETES CORCHETES)?;
codigo: IDENT (operacion| SIMBOLO SIMBOLO )SEPARADOR;
operacion: IGUAL (NUMERO | IDENT asignacion) | asignacion | incremento;
asignacion: PARENTESIS (parametro (COMA parametro))* PARENTESIS;
parametro: (IDENT ((CORCHETE NUMERO CORCHETE)|(PARENTESIS1 (parametro (COMA parametro))* PARENTESIS2))?);